<?php
namespace Payment\Controller;
use Think\Controller;
/*
      首页
*/
class WxpayController extends InitController {
    /**
     * 微信支付页面
     */
    public function WxPayIndex(){
      
      $payoption = I('payoption');
      $payoption=base64_decode($payoption);

      if(empty($payoption)){
          exit;
      }

      $payval=explode('&',$payoption);
      $payment=array();
      foreach($payval as $pk=>$v){
          if(!empty($v)){
              $paymentarray=explode('=',$v);
              $payment[$paymentarray[0]]=$paymentarray[1];
          }
      }
      $out_trade_no = $payment['out_trade_no'];

      //$memberpayment = C('PAYMENT_SETTING');//配置，最后要改为读数据库
	  $memberpayment = M('Options')->where(array('option_name'=>'wx_pay'))->getField('option_value');
	  if(empty($memberpayment)){
			exit('商家没有开通支付方式');
	  }
		$paymentoption = unserialize($memberpayment);
	
		  /* $paymentoption['appid']=$memberpayment['wxpay']['appid'];
		  $paymentoption['appsecret']=$memberpayment['wxpay']['appsecret'];
		  $paymentoption['mchid']=$memberpayment['wxpay']['mchid'];
		  $paymentoption['partnerkey']=$memberpayment['wxpay']['partnerkey'];*/
		 /*
		  define('APPID','wxb50480e89297e7c9');    // 'wx426b3015555a46be';
		  define('APPSECRET','aed7aaef4513b2875d9e1fbb34ea148f');// '01c6d59a3f9024db6336662ac95c8e74';
		  define('MCHID','1244497002'); // = '1225312702';
		  define('KEY','MvVK7w3QUl57JqAfGb5WOq6TeLndV9q6');//  = 'e10adc3949ba59abbe56e057f20f883e';
		   */
          define('APPID',$paymentoption['appid']); 
          define('APPSECRET',$paymentoption['appsecret']);
          define('MCHID',$paymentoption['mchid']); 
          define('KEY',$paymentoption['partnerkey']);
         
          //=======【证书路径设置】=====================================
          /**
           * TODO：设置商户证书路径
           * 证书路径,注意应该填写绝对路径（仅退款、撤销订单时需要，可登录商户平台下载，
           * API证书下载地址：https://pay.weixin.qq.com/index.php/account/api_cert，下载之前需要安装商户操作证书）
           * @var path
           */
          //const SSLCERT_PATH = '../cert/apiclient_cert.pem';
          //const SSLKEY_PATH = '../cert/apiclient_key.pem';
          
          //=======【curl代理设置】===================================
          /**
           * TODO：这里设置代理机器，只有需要代理的时候才设置，不需要代理，请设置为0.0.0.0和0
           * 本例程通过curl使用HTTP POST方法，此处可修改代理服务器，
           * 默认CURL_PROXY_HOST=0.0.0.0和CURL_PROXY_PORT=0，此时不开启代理（如有需要才设置）
           * @var unknown_type
           */
          define('CURL_PROXY_HOST',"0.0.0.0");//"10.152.18.220";
          define('CURL_PROXY_PORT',0);//8080;
          
          //=======【上报信息配置】===================================
          /**
           * TODO：接口调用上报等级，默认紧错误上报（注意：上报超时间为【1s】，上报无论成败【永不抛出异常】，
           * 不会影响接口调用流程），开启上报之后，方便微信监控请求调用的质量，建议至少
           * 开启错误上报。
           * 上报等级，0.关闭上报; 1.仅错误出错上报; 2.全量上报
           * @var int
           */
          define('REPORT_LEVENL',1);
          $notifuurl = 'http://'.$_SERVER['HTTP_HOST']."/";
          define('NOTIFY_URL' , $notifuurl."index.php/Payment/Wxpay/order_notify");
      

      //获取订单id 以及对应的模块
      $payinfo = M('user_paysn')->alias('ps')->join("left join __PAY_LOG__ as pl on ps.id = pl.pay_sn_id")
      ->where("pay_sn = '{$out_trade_no}'")
      ->field("pl.order_id , pl.module ")->find();

      $Rmodule = ucfirst(strtolower($payinfo['module']));
      //通过内部方法，调用对应模块的订单金额
      $r = R($Rmodule."/Payment/SendPaymentMoneyCount",array($payinfo['order_id']));
      $location = $r['host']; //支付完成回跳地址
      $total_fee = $r['count'] * 100;


      //Vendor("Payment.wxpay.Api");
      Vendor("Payment.wxpay.JsApiPay");
      
      //①、获取用户openid
      $tools = new \JsApiPay();
      $openId = $tools->GetOpenid();
      
      //②、统一下单
      //https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1  参数说明文档
     
      $input = new \WxPayUnifiedOrder();

      $input->SetBody(urldecode($payment['body']));//商品描述  
      $input->SetOut_trade_no("{$out_trade_no}");//商户订单号 
      $input->SetTotal_fee($total_fee);//总金额
      $input->SetNotify_url(NOTIFY_URL);//通知地址 
      $input->SetTrade_type("JSAPI");//交易类型
      $input->SetOpenid($openId);

      $order = \WxPayApi::unifiedOrder($input);

      $jsApiParameters = $tools->GetJsApiParameters($order);
      $this->assign(array(
          'location'=>$location,
          'jsApiParameters'=>$jsApiParameters,
      ));
      $this->display('WxPayIndex');
    }

}